---
title: "Sparklines - Bar Customisation"
enterprise: true
---

This section shows how Bar Sparklines can be customised by overriding the default bar options.

The following can be used to customise Bar Sparklines:

* [Bar Fill Options](./sparklines-bar-customisation/#bar-fill-options)
* [Bar Stroke Options](./sparklines-bar-customisation/#bar-stroke-options)
* [Bar Padding Options](./sparklines-bar-customisation/#bar-padding-options)
* [Bar Label Options](./sparklines-bar-customisation/#bar-label-options)
* [Axis Line Options](./sparklines-bar-customisation/#axis-line-options)
* [Sparkline Padding Options](./sparklines-bar-customisation/#sparkline-padding-options)

Also see [Additional Customisations](./sparklines-bar-customisation/#additional-customisations) for more advanced
customisations that are common across all sparklines.

The snippet below shows option overrides for the Bar Sparkline:

```js
sparklineOptions: {
    type: 'bar',
    direction: 'horizontal',
    fill: '#5470c6',
    stroke: '#91cc75',
    highlight: {
        highlightedItem: {
            fill: '#fac858'
        }
    },
    min: 0,
    max: 1
},
```

In the snippet above, the `min` and `max` properties are optional.

`min` and `max` properties are used to specify the interval within which the data values lie. These boundaries are used to create a scale
which will be used to map data values from `0px` to the size of the sparkline.

If the `min` and `max` properties are omitted, the domain will be set to the minimum and maximum values in the provided data, hence it could
be different for different sparklines in the grid depending on the provided data.

The following example demonstrates the results of the Bar Sparkline options above:

{% gridExampleRunner title="Bar Sparkline Customisation" name="bar-sparkline-customisation"  exampleHeight=585 /%}

Note that `min` and `max` properties have been set to `0` and  `1` respectively, indicating that the supplied data across all sparklines will
contain values from `0` to `1`. This allows easy comparisons across the different sparklines in the grid column as all sparklines will
have the same domain.

## Bar Fill Options

To apply a custom color to the bars, set the `fill` property in `sparklineOptions` as shown:

```js
sparklineOptions: {
    type: 'bar',
    direction: 'horizontal',
    fill: '#91cc75', // sets the bar fill
}
```

{% flex justifyContent="center" %}
{% imageCaption imagePath="resources/default.png" alt="Bar fill default" constrained=true width="250px" enableDarkModeFilter=true %}
Default
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-fill.png" alt="Bar fill customisation" constrained=true width="250px" enableDarkModeFilter=true %}
Custom fill
{% /imageCaption %}
{% /flex %}

It is possible to set the fill for the highlighted state of the bar by adding `fill` in `highlight` options as follows:

```js
sparklineOptions: {
    type: 'bar',
    direction: 'horizontal',
    highlight: {
        highlightedItem: {
            fill: 'orange', // sets the highlighted bar fill
        }
    }
}
```

{% flex justifyContent="center" %}
{% imageCaption imagePath="resources/default-highlighted.png" alt="Highlighted Bar fill default" constrained=true width="250px" enableDarkModeFilter=true %}
Default highlighted fill
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-highlighted-fill.png" alt="Highlighted Bar fill customisation" constrained=true width="250px" enableDarkModeFilter=true %}
Custom highlighted fill
{% /imageCaption %}
{% /flex %}

The given `fill` string can be in one of the following formats:

* `#rgb` - Short Hex Code
* `#rrggbb` - Hex Code
* `rgb(r, g, b)` - RGB
* `rgba(r, g, b, a)` - RGB with an alpha channel
* CSS color keyword - such as `aqua`, `orange`, etc.

## Bar Stroke Options

By default, the `strokeWidth` of each bar is `0`, so no outline is visible around the bars.

To add a stroke, modify the `strokeWidth` and `stroke` properties as shown below.

```js
sparklineOptions: {
    type: 'bar',
    direction: 'horizontal',
    stroke: '#ec7c7d', // sets the bar stroke
    strokeWidth: 2, // sets the bar stroke width
    highlight: {
        highlightedItem: {
            stroke: '#b5ec7c', // sets the highlighted bar stroke
            strokeWidth: 2, // sets the highlighted bar stroke width
        }
    }
}
```

* In the snippet above, we have configured the bar stroke to be `2`px in the un-highlighted state, and `2`px in the highlighted state.
* Note that the `stroke` property is also different depending on the highlighted state of the bar.

Here is the result of the configuration shown in the above snippet.

{% flex justifyContent="center" %}
{% imageCaption imagePath="resources/default.png" alt="Stroke default" constrained=true width="250px" enableDarkModeFilter=true %}
Default
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-stroke.png" alt="Stroke customisation" constrained=true width="250px" enableDarkModeFilter=true %}
Custom stroke
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-highlighted-stroke.png" alt="Stroke customisation for highlighted state" constrained=true width="250px" enableDarkModeFilter=true %}
Custom highlighted stroke
{% /imageCaption %}
{% /flex %}

{% note %}
If `strokeWidth` is set to a value greater than `1`, it is recommended to set the axis line `strokeWidth` to the same value in order to preserve the alignment
of the bars with the axis line.
{% /note %}

See AG Charts [Series Markers](https://www.ag-grid.com/charts/javascript/markers/) for more information on marker options.
See AG Charts [Stylers](https://www.ag-grid.com/charts/javascript/stylers/) for more information on item stylers.

## Bar Padding Options

The spacing between bars is adjustable via the `paddingInner` property.
This property takes values between 0 and 1 and is available for axis `type: 'category'` only.

It is a proportion of the “step”, which is the interval between the start of a band and the start of the next band.

Here's an example.

```js
sparklineOptions: {
    type: 'bar',
    direction: 'horizontal',
    axis: {
        type: 'category',
        paddingInner: 0.5, // sets the padding between bars.
    }
}
```

{% flex justifyContent="center" %}
{% imageCaption imagePath="resources/default.png" alt="Bar padding default" constrained=true width="250px" enableDarkModeFilter=true %}
Default
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-padding-inner.png" alt="PaddingInner customisation" constrained=true width="250px" enableDarkModeFilter=true %}
Custom paddingInner
{% /imageCaption %}
{% /flex %}

The padding on the outer edges of the first and last bars can also be adjusted. As with `paddingInner`, this value can be between 0 and 1 and is available for axis `type: 'category'` only.

If the value of `paddingOuter` is increased, the axis line will stick out more at both ends of the sparkline.

Here's a snippet where the `paddingOuter` is set to `0`.

```js
sparklineOptions: {
    type: 'bar',
    direction: 'horizontal',
    axis: {
        type: 'category',
        paddingOuter: 0, // sets the padding on the outer edge of the first and last bars.
    }
}
```

In this case there will be no gap on either end of the sparkline, i.e. between the axis line start and the first bar and the axis line end and the last bar.
This is demonstrated below in the middle sparkline.

{% flex justifyContent="center" %}
{% imageCaption imagePath="resources/default.png" alt="bar padding default" constrained=true width="250px" enableDarkModeFilter=true %}
Default
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-padding-outer.png" alt="PaddingOuter customisation" constrained=true width="250px" enableDarkModeFilter=true %}
No paddingOuter
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-padding-outer-2.png" alt="PaddingOuter customisation" constrained=true width="250px" enableDarkModeFilter=true %}
Increased paddingOuter
{% /imageCaption %}
{% /flex %}

## Bar Label Options

To enable bar labels, set the `enabled` property in `label` options as shown:

```js
sparklineOptions: {
    type: 'bar',
    direction: 'horizontal',
    label: {
        enabled: true // show bar labels
    }
}
```

{% flex justifyContent="center" %}
{% imageCaption imagePath="resources/default.png" alt="Bar default" constrained=true width="250px" enableDarkModeFilter=true %}
Default
{% /imageCaption %}
{% imageCaption imagePath="resources/default-label.png" alt="Bar labels enabled" constrained=true width="250px" enableDarkModeFilter=true %}
Label enabled
{% /imageCaption %}
{% /flex %}

It is possible to change the text value displayed as the label of individual bars by adding a `formatter` callback function to `label` options as follows:

```js
sparklineOptions: {
    type: 'bar',
    direction: 'horizontal',
    label: {
        enabled: true,
        formatter: labelFormatter
    }
}

function labelFormatter({ value }) {
    return `${value}%`
}
```

{% flex justifyContent="center" %}
{% imageCaption imagePath="resources/default.png" alt="Bar default" constrained=true width="250px" enableDarkModeFilter=true %}
Default
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-label-formatter.png" alt="Bar label text customisation" constrained=true width="250px" enableDarkModeFilter=true %}
Custom label text
{% /imageCaption %}
{% /flex %}

To customise the label text style, set the style attributes in `label` options as follows:

```js
sparklineOptions: {
    type: 'bar',
    direction: 'horizontal',
    label: {
        enabled: true,
        fontWeight: 'bold',
        fontStyle: 'italic',
        fontSize: 9,
        fontFamily: 'Arial, Helvetica, sans-serif',
        color: 'black',
    }
}
```

{% flex justifyContent="center" %}
{% imageCaption imagePath="resources/default.png" alt="Bar default" constrained=true width="250px" enableDarkModeFilter=true %}
Default
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-label-styles.png" alt="Bar label text style customisation" constrained=true width="250px" enableDarkModeFilter=true %}
Custom label text styles
{% /imageCaption %}
{% /flex %}

The position of the labels can be specified by setting the `placement` property in `label` options. By default, the labels are positioned at the end of the bars on
the inside, i.e. `placement` is set to `insideEnd `. The snippet below shows how the positioning of the label can be modified:

```js
sparklineOptions: {
    type: 'bar',
    direction: 'horizontal',
    label: {
        enabled: true,
        placement: 'inside-center', // positions the labels in the center of the bars
    }
}
```

Label `placement` options include `inside-center`, `inside-start`, `inside-end`, `outside-start` or `outside-end` from the [AG Charts Label Placement](https://www.ag-grid.com/charts/javascript/bar-series/#reference-AgBarSeriesOptions-label-placement) documentation.
These are shown in the screenshots below.

{% flex justifyContent="center" %}
{% imageCaption imagePath="resources/custom-label-placement-inside-start.png" alt="Bar label inside-start placement" constrained=true width="250px" enableDarkModeFilter=true %}
inside-start
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-label-placement-inside-center.png" alt="Bar label inside-center placement" constrained=true width="250px" enableDarkModeFilter=true %}
inside-center
{% /imageCaption %}
{% /flex %}

{% flex justifyContent="center" %}
{% imageCaption imagePath="resources/custom-label-placement-inside-end.png" alt="Bar label inside-end placement" constrained=true width="250px" enableDarkModeFilter=true %}
inside-end
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-label-placement-outside-end.png" alt="Bar label outside-end placement" constrained=true width="250px" enableDarkModeFilter=true %}
outside-end
{% /imageCaption %}
{% /flex %}

{% note %}
When configuring labels with placement: `outside-end` or `outside-start`, it is recommended to add some padding to the sparkline using the `padding` options in order to prevent the
labels from being clipped.
{% /note %}

## Axis Line Options

By default, an axis line is displayed which can be modified using the `axis` options.

Here is a snippet to demonstrate axis formatting.

```js
sparklineOptions: {
    type: 'bar',
    direction: 'horizontal',
    axis: {
        stroke: '#7cecb3', // sets the axis line stroke
        strokeWidth: 3, // sets the axis line strokeWidth
    },
}
```

{% flex justifyContent="center" %}
{% imageCaption imagePath="resources/default.png" alt="Axis line default" constrained=true width="250px" enableDarkModeFilter=true %}
Default axis line
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-axis.png" alt="Axis line customisation" constrained=true width="250px" enableDarkModeFilter=true %}
Custom axis line
{% /imageCaption %}
{% /flex %}

{% note %}
It's possible to remove the axis line entirely by setting the axis `strokeWidth` to `0`.
{% /note %}

## Sparkline Padding Options

To add extra space around the sparklines, custom `padding` options can be applied in the following way.

```js
sparklineOptions: {
    type: 'bar',
    direction: 'horizontal',
    // sets the padding around the sparklines
    padding: {
        top: 10,
        right: 5,
        bottom: 10,
        left: 5
    },
}
```

* The `top`, `right`, `bottom` and `left` properties are all optional and can be modified independently.

{% flex justifyContent="center" %}
{% imageCaption imagePath="resources/default-padding.png" alt="Padding customisation" constrained=true width="250px" enableDarkModeFilter=true %}
Default padding
{% /imageCaption %}
{% imageCaption imagePath="resources/custom-padding.png" alt="Padding customisation" constrained=true width="250px" enableDarkModeFilter=true %}
Custom padding
{% /imageCaption %}
{% /flex %}

## Building Progress Bars

A progress bar can be used to visualise and compare values across multiple sparklines in the grid. It can illustrate values which have a fixed domain
such as percentages and scores.

The following example shows how to build progress bars using bar sparklines. Note that:

* In order to display a progress bar in a sparkline, the data array should only contain a single value, more values in the data array will produce
  additional bars in the same sparkline.
* `min` and `max` properties have been set to `0` and `100`, indicating that the supplied data across all sparklines will contain values from `0` to `100`.
* This allows easy comparisons of percentages across the different sparklines in the grid column as all sparklines will have the same domain.
* The `itemStyler` callback function is used to dynamically set the fill color of each progress bar to different color values based on the data `yValue` .
* Percentage Y values are displayed on the inside end of each bar by configuring `label` options.
* The axis line and padding are removed to allow more space in each cell for the progress bar.

{% gridExampleRunner title="Bar Sparkline – Progress Bars" name="bar-sparkline-progress-bars"  exampleHeight=585 /%}

## Additional Customisations

More advanced customisations are discussed separately in the following sections:

* [Axis](./sparklines-axis-types/) - configure the axis type via `axis` options.
* [Tooltips](./sparklines-tooltips/) - configure tooltips using `tooltip` options.
* [Points of Interest](./sparklines-points-of-interest/) - configure individual points of interest using an `itemStyler`.

## Next Up

Continue to the next section to learn about: [Column Sparkline Customisation](./sparklines-column-customisation/).
